<?php
/**
*  @package :  class.main
*  @classID :  BaseAction.class.php
*  @author  :  邝达峰
*  @date    : 2017-07-11
* 　动作抽象类
*/

#加载抽象基类
include_once SYSTEM_CLASS_PATH.'main'.DIRECTORY_SEPARATOR.'Action.class.php';

abstract class BaseAction extends Action
{

	/**
	 * 页面模板对象
	 * @var object
	 */
	public static $smarty;
	public $pVars;//$GLOBALS['pVars']作用一样的属性，用于获取数据的同时最后smarty赋值

	/**
	 * 默认请求处理函数
	 * @var string
	 * @access protected
	 */
	protected $_handler = '_default';

	/**
	* 构造函数
	* @param:  NULL
	* @return: NULL
	* @access: public
	*/
	public function __construct()
	{
		#获取到模板对象
		self::$smarty = &$this->getSmarty();

		#继承父类
		$this->_init();

        $intLoadId = $this->session()->getSession('front_uid');
		$this->assign('loginFuid',$intLoadId );
		
		$strLoadUname = $this->session()->getSession('front_uname');
		$this->assign('loginFuname',$strLoadUname );


	}

	/**
	* 析构函数
	* @param:  NULL
	* @return: NULL
	* @access: public
	*/
	public function __destruct(){}


	/**
	 * 控制器自动运行
	 *
	 * @access public
	 * @return void
	 */
	public function run()
	{
		#执行功能函数
		$handler = empty($_REQUEST[FUNCTION_NAME])?$this->_handler:'_'.$_REQUEST[FUNCTION_NAME];
		#判断函数是否存在
		if(!method_exists($this,$handler)){
			$handler = $this->_handler;
		}
		/**
		 * 权限判断
		 * 如果权限不通过，则在validate里面处理错误提示页面及退出程序执行
		 */
		if ($this->validate($handler))
		{
			#执行控制器方法
			$this->$handler();
		}
	}

	/**
	*  显示模板文件
	*  @param:  $html template file
	*  @return: NULL
	*  @access: protected
	*/
	public function show($html='')
	{
		if ($html == ''){
			$html = ApplicationController::$action_tpl_file;
		}
		if(is_object(self::$smarty)){
			return self::$smarty->display($html);
		}
		else{
			throwException($GLOBALS['lang']['SMARTY_DISPLAY_ERROR']);
		}
	}

	/**
	 * 返回赋值后的页面数据流
	 *
	 * @param string $pageRs:赋值数组
	 * @param string $html:页面模板文件
	 * @return string
	 * @access protected
	 */
	public function fetchHtml($html='')
	{
		if ($html == ''){
			$html = ApplicationController::$action_tpl_file;
		}

		if(is_object(self::$smarty)){
			return self::$smarty->fetch($html);
		}
		else{
			throwException($GLOBALS['lang']['SMARTY_FETCH_ERROR']);
		}
	}

	/**
	 * 设置smarty输出值
	 */
	public function setAssign($assign='pVars')
	{
		if(is_array($GLOBALS[$assign]))
		{
			foreach ($GLOBALS[$assign] as $k => $v) {
				self::$smarty->assign($k, $v);
			}
		}

	}


	/*模板变量赋值函数
	*@author: 张伟杰
	*@date:2014.10.20
	**/
	public function tplAssignVar()
	{
		if(is_array($this->pVars)){
			foreach($this->pVars as $k=>$v)
			{
				self::$smarty->assign($k,$v);
			}
		}

	}




	/**
	 * 获取数据库操作模块
	 * @param $model 模块名
	 */
	public function getModel($model){
		if(!empty($model)){
			$className = $model.'Model';
			if (class_exists($className)) {
				$obj = new $className;
				return $obj;
			}
		}
	}


	/**
	 * 获取session对象
	 * @return $oSession 对象
	 */
	public function session(){
		if(class_exists('Session')){
			$oSession = new Session();
			return $oSession;
		}
	}

	/**
	 * 获取到 GET 与 POST 参数值.
	 * @param string $name 参数名
     * @param string $arg 过滤参数
	 * @return mixed 
	 */
	public function getParam($name,$arg=''){
		$res = isset($_GET[$name]) ? $_GET[$name] : (isset($_POST[$name]) ? $_POST[$name] : NULL);
		if($arg){
			if($res !== NULL){
				switch($arg){
                    case 'i':
                        $res = !empty($res) ? intval($res) : '0';
                        break;
					case 't':
						$res  = !empty($res) ? trim($res) : '';
						break;
                    case 'n':
                        $res = is_numeric($res) ? intval($res) : NULL;
                        break;
					default:
						break;
				}
			}
		}
		return $res;
	}


	/**
	 * 获取Config配置对象
	 * @return $oSession 对象
	 */
	public function config(){
		if(class_exists('Config')){
			$oConfig = new Config();
			return $oConfig;
		}
	}


	/**
	 * 获取搜索引擎接口
	 * @return object
	 */
	public function searchApi(){
		if(class_exists('SearchApi')){
			$oSearch= new SearchApi();
			return $oSearch;
		}
	}


	/**
	 * 获取图片处理对象
	 *  @param  $image_dir 图片路径
     *  @param  $max_size 图片大小
     *  @param  $build 是否创建目录
     *  @return NULL
     *  @access public
    */
	public function image($image_dir='',$max_size=300,$build=true){
		if(class_exists('Image')){
			$oImage = new Image($image_dir,$max_size,$build);
			return $oImage;
		}
	}


	/**
	 * 获取文件上传对象
	 *  @param  $upload_dir 文件路径
     *  @param  $max_size 文件大小
     *  @param  $build 是否创建目录
     *  @return NULL
     *  @access public
    */
	public function upload($upload_dir='',$max_size=1000,$build=true){
		if(class_exists('Upload')){
			$oUpload = new Upload($upload_dir,$max_size,$build);
			return $oUpload;
		}
	}

	/**
	 * 获取加密处理对象
	 * @return object
	 */
	public function encrypt(){
		if(class_exists('Crypt')){
			$oCrypt = new Crypt();
			return $oCrypt;
		}
	}

	/**
	 * smarty变量赋值
	 * @param $key 需要赋值的变量
	 * @param $value 需要赋值的值
	 * @return null
	 */
	public function assign($key,$value)
	{
		if(!empty($key) && !empty($value)){
			self::$smarty->assign($key, $value);
		}
	}




	/**
	 * 设置smarty输出模板
	 * @return null
	 */
	public function tpl_path($strAction)
	{
		ApplicationController::$action_tpl_file = preg_replace("'\/\w+\.html$'si",'/' . $strAction.".html",ApplicationController::$action_tpl_file);
	}


	/**
	 * 设置smarty完整输出模板
	 * @return null
	 */
	public function tpl_full_path($strAction)
	{
		ApplicationController::$action_tpl_file = USER_THEME_PATH.$strAction.'.html';
	}



	/**
	 * 返回smarty模板路径
	 */
	public function tpl_path_return($strAction)
	{
		return preg_replace("'\/\w+\.html$'si",'/' . $strAction.".html",ApplicationController::$action_tpl_file);
	}


	/**
	 * 加载smarty配置文件，并将其中的数据返回
	 *
	 */
	public static function getSmartyConf($file,$section=NULL)
	{
		BaseAction::$smarty->config_load($file,$section);
		$reConf = BaseAction::$smarty->_config[0]['vars'];
		BaseAction::$smarty->clear_config();
		return $reConf;
	}


	/**
	 * 控制器退出
	 */
	protected function _exit()
	{

	}

	/**
	* 反序列化前触发动作
	* @param:  NULL
	* @return: NULL
	* @access: protected
	*/
	public function __wakeup()
	{
		$this->__construct();
	}


	/**
	 * 404页面跳转
	 */
	public function goTo404(){
		goTo404();
	}


	/**
	 * 301页面跳转
	 * @param $url 需要跳转的页面
	 */
	public function goTo301($url){
		if(!empty($url)){
			goTo301($url);
		}
	}

	/**
      * 页面重定向
      * @param string $url 重定向链接
      * @param $target_window 重写类型 self,自身，top，上一级
     */
	public function redirect($url, $target_window='self'){
		if(!empty($url)){
			redirect($url,$target_window);
		}
	}


	/**
	*  页面跳转返回
	*  @param:  $message 跳转信息
	*  @param:  $go  跳转返回上一级
	*  @param:  $isReload  是否本页面更新
	*  @return: NULL
	*/
	public function alertBack($message = '',$go = -1,$isReload = false)
	{
		alertBack($message,$go,$isReload);
	}

	/**
	* 只显示提示信息,不做任何跳转
	* @param string $message 跳转信息
	* @return: NULL
	*/
	public function alert($message = '')
	{
		alert($message);
	}


	/**
	*  提示信息跳转页面
	*  @param:  $message 提示信息
	*  @param:  $url     跳转地址
	*  @return: NULL
	*/
	public function alertGoto($message,$url='/',$target='')
	{
		alertGoto($message,$url,$target);
	}

	/**
     *  ajax读取模板
     *  @param:  $fname 文件名
     *  @return: $str 字符
     */
	function ajaxFetch($fname=""){
		$fn=USER_THEME_PATH.$fname;
		if(file_exists($fn)){
			@ob_start();
			include($fn);
			$contents = ob_get_contents();
			@ob_end_clean();
			return $contents;
		}else{
			return null;
		}
	}

	/**
     *  设置页面缓存
     * @param $status 1为打开 0为关闭 默认关闭
     * @param $time 需要缓存的时间 默认1200毫秒
     * @return: null
     */
	function setWebCache($status=false,$time='')
	{
		if($status){
			#开启页面缓存
			echo $cacheTime = $time?$time:1200;
			header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
			header("Cache-Control: max-age=".($cacheTime));
			header("Expires: " .gmdate("D, d M Y H:i:s",time()+$cacheTime). " GMT");
			header("Pragma: public");
		}else{
			#强制清除页面缓存
			header("Expires: " .gmdate("D, d M Y H:i:s",time()-72000). " GMT");
			header("Last-Modified: " . date("D, d M Y H:i:s",time()-36000) . " GMT");
			header("Cache-Control: no-cache, must-revalidate");
			header('Cache-Control: no-store, no-cache, must-revalidate');
			header('Cache-Control: pre-check=0, post-check=0, max-age=0');
			header('Pragma: no-cache');
		}




	}

}
?>